宏 LIST_HEAD
初始化一个 list_head 结构
#define LIST_HEAD_INIT(name) { &(name), &(name) }
#define LIST_HEAD(name) \
struct list_head name = LIST_HEAD_INIT(name)
LIST_HEAD(name) 整个展开后为
struct list_head name = {&(name), &(name)}
这不就是结构体的初始化嘛,相当于创建并初始化 list_head
,其 next
、prev
均指向 name
本身
在内核中使用
比如在 drivers/spi/spi.c
中的使用
/**
* acpi_spi_count_resources - Count the number of SpiSerialBus resources
* @adev: ACPI device
*
* Returns the number of SpiSerialBus resources in the ACPI-device's
* resource-list; or a negative error code.
*/
int acpi_spi_count_resources(struct acpi_device *adev)
{
LIST_HEAD(r);
int count = 0;
int ret;
ret = acpi_dev_get_resources(adev, &r, acpi_spi_count, &count);
if (ret < 0)
return ret;
acpi_dev_free_resource_list(&r);
return count;
}